﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SeguroSoft.Models;
using System.Web.Routing;
using SeguroSoft.Model.Model;


namespace SeguroSoft.Controllers
{
    public class UsuarioController : Controller
    {
        IUsuarioRepositorio repo = new UsuarioRepositorio();
        public IFormsAuthenticationService FormsService { get; set; }

        //
        // GET: /Usuario
        public ActionResult LogOff()
        {
            FormsService.SignOut();

            return RedirectToAction("Index", "Home");
        }

        public ActionResult Index()
        {
            return View("CrearUsuario");
        }

        protected override void Initialize(RequestContext requestContext)
        {
            if (FormsService == null) { FormsService = new FormsAuthenticationService(); }
            base.Initialize(requestContext);
        }

        public ActionResult LogOn() { return View("LogOn");}

        [HttpPost]
        public ActionResult LogOn(LogOnModel model, string returnUrl) {

            if(ExisteUsuario(model.UserName,model.Password)){
               FormsService.SignIn(model.UserName, model.RememberMe);
               string lala= this.Request.RequestContext.HttpContext.User.Identity.Name;

            if (!String.IsNullOrEmpty(returnUrl))
            {
                return Redirect(returnUrl);
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }

            }
            else{return View();}
        
        }

        private bool ExisteUsuario(string UserName,string password) {
            Usuario user = repo.getUsuario(UserName);
            if (user == null) { return false; }
            else{

            if (user.Clave.Equals(password)) { return true; }
            else { return false; }
                }
        }


        [AcceptVerbs(HttpVerbs.Get)]
        public ActionResult CrearUsuario()
        {
           
            return View("CrearUsuario");
        }



        [AcceptVerbs(HttpVerbs.Get)]
        public ActionResult ModificarUsuario()
        {
            Usuario user = repo.getUsuario(User.Identity.Name);
            return View("ModificarUsuario",user);
        }



        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult ModificarUsuario(Usuario user)
        {
            try
            {
                UpdateModel(user);
                string name=this.User.Identity.Name;
                repo.CambiarClaveUsuario(name, user.Clave);
                repo.ModificarMail(name, user.Correo);
                repo.ModificarDireccion(name, user.Direccion);
                repo.Save();
                return RedirectToAction("InfoUsuario", new { username = name });

            }
            catch
            {
                string error = "";

                if (error.Equals("")) { error += "Hubo un error al intentar modifical el Usuario "; }

                object a = error;
                return View("ErrorCrearUsuario", a);
            }

        }


         [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult CrearUsuario(Usuario user)
        {
            try {
               
                UpdateModel(user);
                repo.AgregarUsuario(user);
                repo.Save();
                return RedirectToAction("InfoUsuario", new { username = user.Usuario1 });
            
            }
            catch
            {
                string error = "";
                if (user.Usuario1 == null) {
                    error += "Nombre de Usuario Invalido, ";
                }
                else{
                    if(repo.getUsuario(user.Usuario1)==null){}
                    else{error+="El Nombre de Usuario ya existe";}
                }
                if (error.Equals("")) { error += "Porfavor rellene los campos"; }

                object a=error;
                return View("ErrorCrearUsuario",a);
            }
            
        }


        [AcceptVerbs(HttpVerbs.Get)]
         public ActionResult InfoUsuario(string username) {
            Usuario user= repo.getUsuario(username);
            if (user == null) { return View("NotFound");}
                else{
            return View("InfoUsuario", user);
                }
            }
       
         
         

    }
}
